package xyz.lwm.lazycat.utility;

import org.jetbrains.annotations.NotNull;
import xyz.lwm.lazycat.utility.reflect.ReflectUtil;

import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

/**
 * @author lwm
 */
public abstract class MapUtil {

    public static <K, V> boolean isEmpty(Map<K, V> map) {
        return map == null || map.isEmpty();
    }

    public static <K, V> boolean isNotEmpty(Map<K, V> map) {
        return !isEmpty(map);
    }

    @SuppressWarnings("unchecked")
    public static <M extends Map<K, V>, K, V> M newMap(@NotNull Class<M> clz) {
        int modifiers;
        if (Map.class.equals(clz)) {
            return (M) new HashMap<>();
        } else if (Modifier.isPublic(modifiers = clz.getModifiers())
                && !Modifier.isAbstract(modifiers) && !Modifier.isInterface(modifiers)) {
            return ReflectUtil.newInstance(clz);
        } else {
            return null;
        }
    }

}
